﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;

namespace Ocean.His.MedicalInsurance
{
    /// <summary>
    /// 4301
    /// 挂号信息
    /// </summary>
    [DataContract]
    public class SI4301RgstInfo
    {
        /// <summary>
        /// 就医流水号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 院内唯一号
        /// </summary>
        [DataMember(Name = "mdtrt_sn")]
        public string MdtrtSn { get; set; }

        /// <summary>
        /// 就诊ID
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 医保病人必填
        /// </summary>
        [DataMember(Name = "mdtrt_id")]
        public string MdtrtId { get; set; }

        /// <summary>
        /// 人员编号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 医保病人必填
        /// </summary>
        [DataMember(Name = "psn_no")]
        public string PsnNo { get; set; }

        /// <summary>
        /// 挂号类别代码
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rgst_type_code")]
        public string RgstTypeCode { get; set; }

        /// <summary>
        /// 挂号方式代码
        /// 参数类型：字符型
        /// 参数长度：6
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rgst_way_code")]
        public string RgstWayCode { get; set; }

        /// <summary>
        /// 挂号费/医事服务费
        /// 参数类型：数值型
        /// 参数长度：16,2
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rgst_serv_fee")]
        public decimal RgstServFee { get; set; }

        /// <summary>
        /// 预约途径代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "ordr_way_code")]
        public string OrdrWayCode { get; set; }

        /// <summary>
        /// 退号标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：
        /// 是否必填：
        /// 0-否、1-是
        /// </summary>
        [DataMember(Name = "retnr_flag")]
        public string RetnrFlag { get; set; }

        /// <summary>
        /// 初诊标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：
        /// 是否必填：
        /// 0-否、1-是
        /// </summary>
        [DataMember(Name = "fstdiag_flag")]
        public string FstdiagFlag { get; set; }

        /// <summary>
        /// 就诊标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：
        /// 是否必填：
        /// 0-否、1-是
        /// </summary>
        [DataMember(Name = "mdtrt_flag")]
        public string MdtrtFlag { get; set; }

        /// <summary>
        /// 挂号/退号时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rgst_retnr_time")]
        public string RgstRetnrTime { get; set; }

        /// <summary>
        /// 医疗费用支付方式代码
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "medfee_paymtd_code")]
        public string MedfeePaymtdCode { get; set; }

        /// <summary>
        /// 有效标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "vali_flag")]
        public string ValiFlag { get; set; }

    }

    /// <summary>
    /// 病历信息
    /// </summary>
    [DataContract]
    public class SI4301CaseInfo
    {
        /// <summary>
        /// 就诊日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：是
        /// 
        /// </summary>
        [DataMember(Name = "mdtrt_date")]
        public string MdtrtDate { get; set; }

        /// <summary>
        /// 主诉
        /// 参数类型：字符型
        /// 参数长度：2000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "chfcomp")]
        public string Chfcomp { get; set; }

        /// <summary>
        /// 发病日期时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "attk_date_time")]
        public string AttkDateTime { get; set; }

        /// <summary>
        /// 就诊原因
        /// 参数类型：字符型
        /// 参数长度：200
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "mdtrt_rea")]
        public string MdtrtRea { get; set; }

        /// <summary>
        /// 病史
        /// 参数类型：字符型
        /// 参数长度：2000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "illhis")]
        public string Illhis { get; set; }

        /// <summary>
        /// 过敏史
        /// 参数类型：字符型
        /// 参数长度：2000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "algs")]
        public string Algs { get; set; }

        /// <summary>
        /// 过敏源代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "aise_code")]
        public string AiseCode { get; set; }

        /// <summary>
        /// 查体
        /// 参数类型：字符型
        /// 参数长度：2000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "phex")]
        public string Phex { get; set; }

        /// <summary>
        /// 残疾情况代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "disa_info_code")]
        public string DisaInfoCode { get; set; }

        /// <summary>
        /// 症状名称
        /// 参数类型：字符型
        /// 参数长度：1000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "symp_name")]
        public string SympName { get; set; }

        /// <summary>
        /// 症状代码
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 最多五个症状
        /// </summary>
        [DataMember(Name = "symp_code")]
        public string SympCode { get; set; }

        /// <summary>
        /// 处置意见
        /// 参数类型：字符型
        /// 参数长度：1000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "dspo_opnn")]
        public string DspoOpnn { get; set; }

        /// <summary>
        /// 科室代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "dept_code")]
        public string DeptCode { get; set; }

        /// <summary>
        /// 科室名称
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "dept_name")]
        public string DeptName { get; set; }

        /// <summary>
        /// 有效标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "vali_flag")]
        public string ValiFlag { get; set; }

    }

    /// <summary>
    /// 诊断信息
    /// </summary>
    [DataContract]
    public class SI4301DiseInfo
    {
        /// <summary>
        /// 中医诊断标志
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcm_diag_flag")]
        public string TcmDiagFlag { get; set; }

        /// <summary>
        /// 主诊断标志
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "maindiag_flag")]
        public string MaindiagFlag { get; set; }

        /// <summary>
        /// 诊断代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "diag_code")]
        public string DiagCode { get; set; }

        /// <summary>
        /// 诊断名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "diag_name")]
        public string DiagName { get; set; }

        /// <summary>
        /// 中医病名代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcm_dise_code")]
        public string TcmDiseCode { get; set; }

        /// <summary>
        /// 中医病名名称
        /// 参数类型：字符型
        /// 参数长度：300
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcm_dise_name")]
        public string TcmDiseName { get; set; }

        /// <summary>
        /// 中医证候代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcmsymp_code")]
        public string TcmsympCode { get; set; }

        /// <summary>
        /// 中医证候
        /// 参数类型：字符型
        /// 参数长度：300
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcmsymp")]
        public string Tcmsymp { get; set; }

        /// <summary>
        /// 有效标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "vali_flag")]
        public string ValiFlag { get; set; }

    }

    /// <summary>
    /// 诊断信息
    /// </summary>
    [DataContract]
    public class SI4301RxInfo
    {

        /// <summary>
        /// 处方号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rxno")]
        public string Rxno { get; set; }

        /// <summary>
        /// 处方开方时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rx_prsc_time")]
        public string RxPrscTime { get; set; }

        /// <summary>
        /// 处方类别代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rx_type_code")]
        public string RxTypeCode { get; set; }

        /// <summary>
        /// 处方项目分类代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rx_item_type_code")]
        public string RxItemTypeCode { get; set; }

        /// <summary>
        /// 处方项目分类名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rx_item_type_name")]
        public string RxItemTypeName { get; set; }

        /// <summary>
        /// 处方明细代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 医院内部药品编码
        /// </summary>
        [DataMember(Name = "rx_detl_id")]
        public string RxDetlId { get; set; }

        /// <summary>
        /// 处方明细名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：
        /// 医院内部药品名称
        /// </summary>
        [DataMember(Name = "rx_detl_name")]
        public string RxDetlName { get; set; }

        /// <summary>
        /// 中药类别名称
        /// 参数类型：字符型
        /// 参数长度：20
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcmdrug_type_name")]
        public string TcmdrugTypeName { get; set; }

        /// <summary>
        /// 中药类别代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcmdrug_type_code")]
        public string TcmdrugTypeCode { get; set; }

        /// <summary>
        /// 草药脚注
        /// 参数类型：字符型
        /// 参数长度：200
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "tcmherb_foote")]
        public string TcmherbFoote { get; set; }

        /// <summary>
        /// 药物类型代码
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "medn_type_code")]
        public string MednTypeCode { get; set; }

        /// <summary>
        /// 药物类型
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "medn_type_name")]
        public string MednTypeName { get; set; }

        /// <summary>
        /// 药品剂型
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 【dosform】代码
        /// </summary>
        [DataMember(Name = "drug_dosform")]
        public string DrugDosform { get; set; }

        /// <summary>
        /// 药品剂型名称
        /// 参数类型：字符型
        /// 参数长度：200
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_dosform_name")]
        public string DrugDosformName { get; set; }

        /// <summary>
        /// 药品规格
        /// 参数类型：字符型
        /// 参数长度：255
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_spec")]
        public string DrugSpec { get; set; }

        /// <summary>
        /// 药物使用-频率
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_used_frqu")]
        public string DrugUsedFrqu { get; set; }

        /// <summary>
        /// 
        /// 参数类型：药物使用-总剂量
        /// 参数长度：数值型
        /// 代码标识：16，4
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_used_idose")]
        public string DrugUsedidose { get; set; }

        /// <summary>
        /// 药物使用-次剂量
        /// 参数类型：数值型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_used_sdose")]
        public decimal DrugUsedSdose { get; set; }

        /// <summary>
        /// 药物使用-剂量单位
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_used_dosunt")]
        public string DrugUsedDosunt { get; set; }

        /// <summary>
        /// 药物使用-途径代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_used_way_code")]
        public string DrugUsedWayCode { get; set; }

        /// <summary>
        /// 药物使用-途径
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_medc_way")]
        public string DrugMedcWay { get; set; }

        /// <summary>
        /// 皮试判别
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "skintst_dicm")]
        public string SkintstDicm { get; set; }

        /// <summary>
        /// 用药开始时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "medc_begntime")]
        public string MedcBegntime { get; set; }

        /// <summary>
        /// 用药停止日期时间
        /// 参数类型：日期时间型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "medc_endtime")]
        public string MedcEndtime { get; set; }

        /// <summary>
        /// 用药天数
        /// 参数类型：数值型
        /// 参数长度：5,0
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "medc_days")]
        public decimal MedcDays { get; set; }

        /// <summary>
        /// 主要用药标志
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "main_medc_flag")]
        public string MainMedcFlag { get; set; }

        /// <summary>
        /// 加急标志
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "urgt_flag")]
        public string UrgtFlag { get; set; }

        /// <summary>
        /// 统一采购药品
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "unif_purc_drug")]
        public string UnifPurcDrug { get; set; }

        /// <summary>
        /// 药品采购代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_purc_code")]
        public string DrugPurcCode { get; set; }

        /// <summary>
        /// 药品管理平台代码
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "drug_mgt_plaf_code")]
        public string DrugMgtPlafCode { get; set; }

        /// <summary>
        /// 基本药物标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "bas_medn_flag")]
        public string BasMednFlag { get; set; }

        /// <summary>
        /// 有效标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "vali_flag")]
        public string ValiFlag { get; set; }

    }

    /// <summary>
    /// 
    /// </summary>
    [DataContract]
    public class SI4301InputModel
    {
        [DataMember(Name = "rgstinfo")]
        public SI4301RgstInfo si4301RgstInfo { get; set; }

        [DataMember(Name = "caseinfo")]
        public SI4301CaseInfo si4301CaseInfo { get; set; }

        [DataMember(Name = "diseinfo")]
        public SI4301DiseInfo si4301DiseInfo { get; set; }

        [DataMember(Name = "rxinfo")]
        public SI4301RxInfo si4301RxInfo { get; set; }
    }

    /// <summary>
    /// 4301
    /// 门急诊诊疗记录
    /// </summary>
    [DataContract]
    public class SI4301RequestModel : SIBaseRequestModel
    {
        /// <summary>
        /// 交易输入
        /// </summary>
        [DataMember(Name = "input")]
        public SI4301InputModel Input { get; set; }

        public SI4301RequestModel(MedicalInsuranceOption config) : base(config)
        {
            Infno = "4301";
        }
    }
}
